home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_368 / newex / newex_sw.asm < prev    next >
Assembly Source File  |  1992-05-06  |  16KB  |  364 lines

  1.  
  2. ;            NewEx_Sw.asm   90-06-11  Version V1.1
  3. ;
  4. ;            New Executeing program
  5. ;
  6. ;            Written by Kjell Cederfeldt in June - 90.
  7. ;
  8. ExecBase           = 4
  9. OpenLibrary        = -408         ; exec offset       OpenLibrary(libName,version)(A1,D0)
  10. CloseLibrary       = -414         ; exec offset       CloseLibrary(library)(a1)
  11. FindTask           = -294         ; exec offset       FindTask(name)(a1)
  12. WaitPort           = -384         ; exec offset       WaitPort(port)(a0)
  13. GetMsg             = -372         ; exec offset       GetMsg(port)(a0)
  14. ReplayMsg          = -378         ; exec offset       ReplayMsg(message)(a1)
  15. Forbid             = -132         ; exec offset       Forbid()
  16. Open               = -30          ; dos offset        Open(name,accessMode)(D1/D2)
  17. Close              = -36          ; dos offset        Close(file)(D1)
  18. Write              = -48          ; dos offset        Write(file,buffer,length)(d1/d2/d3)
  19. OutPut             = -60          ; dos offset        OutPut()
  20. Lock               = -84          ; dos offset!       Lock(name,mode)(d1,d2)
  21. UnLock             = -90          ; dos offset!       UnLock(lock)(d1)
  22. Examine            = -102         ; dos offset!       Examine(Lock,InfoBlock)(d1,d2)
  23. CurrentDir         = -126         ; dos offset        CurrentDir(lock)(d1)
  24. ParentDir          = -210         ; dos offset!       ParentDir(lock)(d1)
  25. Execute            = -222         ; dos offset        Execute(string,file,file)(D1/D2/D3)
  26. GetDiskObject      = -78          ; icon offset       GetDiskObject(name)(a0)
  27. FindToolType       = -96          ; icon offset       FindToolType(toolTypeArray,typeName)(A0/A1)
  28. FreeDiskObject     = -90          ; icon offset       FreeDiskObject(diskobj)(a0)
  29. Mode_old           = 1005         ;
  30. Mode_new           = 1006         ;
  31. Access_read        = -2
  32.  
  33.                    move.l sp,Initial_SP               ;Spara stackpekaren
  34.                    move.l a0,Filename                 ;CLI=true spara adress till agument
  35.                    sub.l  #1,d0                       ;Minska längden med 1
  36.                    add.l  d0,a0                       ;Addera längden till adressen
  37.                    move.b #0,(a0)                     ;Nolla sista byten (CLI=0A)
  38.                    move.l #0,RetCode                  ;Nolla Returncode
  39.  
  40. START:             move.l ExecBase,a6
  41.                    suba.l a1,a1                       ;Hitta detta Task
  42.                    jsr    Findtask(a6)                
  43.                    move.l d0,a4                       ;Spara strukturen i a4
  44.                    tst.l  $ac(a4)                     ;CLI eller WB ?
  45.                    bne    CliStart                    ;
  46.  
  47.  
  48. ;       ** Detta endast om start från WB
  49.  
  50.  
  51.                    move.l #49,RetCode                 ;Sätt Returncode
  52.                    lea    $5c(a4),a0                  ;WBench message
  53.                    jsr    WaitPort(a6)                ;vänta
  54.                    jsr    GetMsg(a6)                  ;hämta message
  55.                    move.l d0,Message                  ;spara pekare till WBMessage
  56.                    beq    Slut                        ;error!
  57.  
  58.                    move.l #48,RetCode                 ;Sätt Returncode
  59.                    move.l Message,a0                  ;Pekare till WBMessage
  60.                    move.l $24(a0),a0                  ;Argumentlista
  61.                    beq    Slut2                       ;inga agument
  62.  
  63. CliStart:
  64.  
  65.  
  66. ;   Öppna icon.library
  67.  
  68.                    move.l #47,RetCode                 ;Sätt Returncode
  69.                    lea    Iconname(pc),a1             ;Ladda adressen för IconName i a1
  70.                    clr.l  d0                          ;Tillåt alla versioner
  71.                    jsr    OpenLibrary(a6)             ;öppna iconlibrary
  72.                    move.l d0,Iconbase                 ;Spara Iconbase
  73.                    beq    Error1                      ;Hoppa om fel!
  74.  
  75.  
  76. ;   Öppna dos.library
  77.  
  78.                    move.l #46,RetCode                 ;Sätt Returncode
  79.                    lea    Dosname(pc),a1              ;Ladda adressen för DosName i a1
  80.                    clr.l  d0                          ;Tillåt alla dosversioner
  81.                    jsr    OpenLibrary(a6)             ;öppna doslibrary
  82.                    move.l d0,Dosbase                  ;Spara Dosbase
  83.                    beq    Error2                      ;Hoppa om fel!
  84.  
  85.  
  86.                    jsr    PointTOCLI
  87.  
  88.                    tst.l  Message                     ;Om start från CLI
  89.                    beq    InFileOpen                  ;Hopp till FileOpens
  90.  
  91. ;   ställ Current directory
  92.  
  93.                    move.l #45,RetCode                 ;Sätt Returncode
  94.                    move.l Message,a0                  ;Pekare till WBMessage sm_ArgList
  95.                    move.l $24(a0),a0                  ;flytta pekaren till wa_Lock
  96.                    beq    Error3                      ;Error!
  97.  
  98.                    move.l (a0),d1                     ;D1 => Lock
  99.                    move.l Dosbase,a6
  100.                    jsr    CurrentDir(a6)              ;Lås Current Dir
  101.  
  102. ;   Hämta diskobject (.info fil)
  103.  
  104.                    move.l #44,RetCode                 ;Sätt Returncode
  105.                    move.l Message,a0
  106.                    move.l $24(a0),a0
  107.                    move.l 4(a0),a0                    ;flytta pekaren till wa_Name
  108.                    move.l a0,Filename
  109.                    move.l Iconbase,a6
  110.                    jsr    GetDiskObject(a6)           ;Hämta diskobject
  111.                    move.l d0,Diskobj                  ;Spara undan diskobjectet
  112.                    beq    Error3                      ;Error!
  113.                    move.l d0,a1
  114.                    move.l $36(a1),a1                  ;pekare till ToolType Array
  115.                    move.l a1,toolTypeArray            ;spara pekaren
  116.  
  117.  
  118.  
  119. ;            *** Hämta argument från tool icon (tooltype)
  120.  
  121.                    move.l Iconbase,a6
  122.                    move.l toolTypeArray,a0
  123.                    move.l #typeName1,a1
  124.                    jsr    FindToolType(a6)
  125.                    move.l d0,Inname
  126.  
  127.                    move.l toolTypeArray,a0
  128.                    move.l #typeName2,a1
  129.                    jsr    FindToolType(a6)
  130.                    move.l d0,Outname
  131.  
  132.  
  133. ;   öppna utfil
  134.                    move.l #43,RetCode                 ;Sätt Returncode
  135.                    move.l DosBase,a6                  ;Hämta dosbasen
  136.                    move.l Outname,d1                  ;Hämta filnamn
  137.                    move.l #Mode_new,d2                ;1006=NewFile: 1005=Existing file
  138.                    jsr    Open(a6)                    ;öppna filen
  139.                    move.l d0,Outhandle                ;Spara filhateraren
  140.                    beq    Error3                      ;Hoppa om fel!
  141.  
  142. ;-------
  143. ;   öppna läsfil
  144. ;-------
  145. InFileOpen:
  146.  
  147.                    move.l #42,RetCode                 ;Sätt Returncode
  148.                    move.l Filename,d1                 ;Hämta filnamn
  149.                    tst.l  Message                     ;Koll om Start WB el CLI?
  150.                    beq.s  InopLab                     ;Hopp, om CLI
  151.                    move.l Inname,d1                   ;Hämta filnamn
  152. InOpLab:           move   #Mode_old,d2                ;1005=Existing file : 1006=NewFile
  153.                    move.l DosBase,a6                  ;Hämta dosbasen
  154.                    jsr    Open(a6)                    ;öppna filen
  155.                    move.l d0,Inhandle                 ;Spara filhateraren
  156.                    bne    BldPath                     ;Hoppa om ej fel!
  157.  
  158.                    tst.l  Message                     ;Koll om Start WB el CLI?
  159.                    bne.s  Err                         ;Hopp, om WB
  160.                    move.l CLIpoint,d1
  161.                    move.l #Textfld,d2
  162.                    move.l #84,d3
  163.                    jsr    Write(a6)
  164. Err:               bra    Error4
  165.  
  166.  
  167. ;             Hämta och bygg sökväg.
  168.  
  169. BldPath:           jsr    GetPath                     ;bygg path
  170.  
  171.  
  172. Skriv:    ; Detta är bra vid buggning (används ej i programmet)
  173.                    move.l Dosbase,a6
  174. ;                   move.l CLIpoint,d1
  175. ;                   tst.l  Message                     ;Koll om Start WB el CLI?
  176. ;                   beq.s  Skr                         ;Hopp till End om CLI
  177. ;                   move.l Outhandle,d1
  178. ;Skr:               move.l #path,d2
  179. ;                   move.l #255,d3                      ;sträng längd
  180. ;                   jsr    Write(a6)
  181. ;--------
  182. ;   anroppa Execute (dosfunktion)
  183. ;--------
  184.                    move.l #0,RetCode                 ;Nolla Returncode
  185.                    move.l CLIPoint,d3
  186.  
  187.                    tst.l  Message                     ;Koll om Start WB el CLI?
  188.                    beq.s  Exlabel                     ;Hopp till End om CLI
  189.  
  190.                    move.l Outhandle,d3                ;hämta fil hanterare
  191. Exlabel:           move.l PathStart,d1                ;hämta pekare för sträng
  192.                    move.l InHandle,d2                 ;hämta fil hanterare
  193.                    jsr    Execute(a6)                 ;exectue a scripfile (dos)
  194.  
  195.  
  196. ;---------
  197. ;   Stäng filer
  198. ;---------
  199.  
  200. Cleanup1:          move.l Inhandle,d1
  201.                    jsr    Close(a6)
  202.  
  203. Error4:            tst.l  Message                     ;Koll om Start WB el CLI?
  204.                    beq.s  temp                        ;Hopp till End om CLI
  205.  
  206.                    move.l Outhandle,d1
  207.                    jsr    Close(a6)
  208.  
  209.  
  210. Error3:            move.l Iconbase,a6                 ;Hämta Iconbase
  211.                    move.l Diskobj,a0                  ;Hämta diskobject strukturen
  212.                    jsr    FreeDiskobject(a6)          ;Frigör Diskobject
  213.  
  214. temp:              move.l Dosbase,a1                  ;Hämta Dosbase
  215.                    move.l Execbase,a6
  216.                    jsr    CloseLibrary(a6)            ;stäng Doslibrary:
  217.  
  218. Error2:            move.l Iconbase,a1                 ;Hämta IconBase
  219.                    move.l Execbase,a6
  220.                    jsr    CloseLibrary(a6)            ;Stäng Iconlibrary
  221.  
  222.  
  223. Error1:            tst.l  Message                     ;Koll om Start WB el CLI?
  224.                    beq.s  Slut                        ;Hopp till End om CLI
  225. Slut2:             jsr    Forbid(a6)
  226.                    move.l Message,a1
  227.                    jsr    ReplayMsg(a6)               ;lämna tillbaka struktur
  228.  
  229. Slut:              move.l Initial_SP,sp               ;Hämta start stacken
  230.                    clr.l  d0
  231.                    move.l RetCode,d0                  ;Hämta returncode till D0
  232.                    rts
  233.  
  234. ;       !!    *********** System DATA **************  !!
  235.  
  236. Initial_SP:        dc.l   0
  237. RetCode:           dc.l   0
  238. Iconbase:          dc.l   0
  239. Dosbase:           dc.l   0
  240. Inhandle:          dc.l   0
  241. Outhandle:         dc.l   0
  242. Message:           dc.l   0
  243. Diskobj:           dc.l   0
  244. CLIpoint:          dc.l   0
  245. Filename:          dc.l   0
  246. NewLock:           dc.l   0
  247. ParLock:           dc.l   0
  248. Inname:            dc.l   0
  249. Outname:           dc.l   0
  250. Pathstart:         dc.l   0
  251. Dosname:           dc.b   'dos.library',0
  252.                    align
  253. Iconname:          dc.b   'icon.library',0
  254.                    align
  255. TempNamn:          blk.b  32,0
  256.                    align
  257. Path:              blk.b  255,0
  258.                    align
  259. typeName1:         dc.b   "FILENAME",0,0
  260.                    align
  261. typeName2:         dc.b   "WINDOW",0,0
  262.                    align
  263. Textfld:           dc.b   27,"[33mNewEx Version 1.1 by Kjell Cederfeldt",13,10,10
  264.                    dc.b   "No file name or file not found!",27,"[31m",13,10,10
  265.                    align
  266. toolTypeArray:     dc.l   0
  267. IconText:          dc.l   0
  268. FileInfoblock:     blk.b  260,0
  269.                    align
  270.  
  271. ;                                 ReturnCode 47 = icon.library ej öppnad
  272. ;                                 ReturnCode 46 = dos.library  ej öppnad
  273. ;                                 ReturnCode 45 = currentdir ej låst
  274. ;                                 ReturnCode 44 = diskobjekt ej hittad
  275. ;                                 ReturnCode 43 = utfil (enhet) ej funnen
  276. ;                                 ReturnCode 42 = infil (enhet) ej funnen
  277.  
  278. ;********************   Subrutiner   ***************************************
  279.  
  280. PointTOCLI:
  281.  
  282. ; Output funktionen är bra om man vill skriva text ut i cli-fönstret som man startade i
  283.  
  284.                    move.l Dosbase,a6                  ;doslibrary pekare till
  285.                    jsr    OutPut(a6)                  ;hämta output pekare till Dos!
  286.                    move.l d0,CLIpoint                 ;Spara undan pekaren
  287.                    rts
  288.  
  289. ;***************************************************************************
  290.  
  291. GetPath:
  292.                    move.l #Path,d2                    ;peka på adressen till Path
  293.                    add.l  #253,d2                     ;peka på slutet -2 (" + terminering)
  294.                    move.l d2,PathStart                ;Tala om var start på path
  295.                                                       ;stängen börjar
  296.  
  297.                    move.l Dosbase,a6                  ;Hämta dosbase
  298.                    move.l #Filename,d1                ;hämta pekare till filnamn
  299.                    move.l Access_read,d2              ;läs-mode endast
  300.                    jsr    Lock(a6)                    ;lås!
  301.                    tst.l  d0
  302.                    beq    EndLoop                     ;Ingen Fil hittades
  303.                    move.l d0,NewLock                  ;spara låset
  304.  
  305. MainLoop:          move.l NewLock,d1                  ;Hämta låset
  306.                    move.l #Fileinfoblock,d2           ;hämta adress till block
  307.                    jsr    Examine(a6)                 ;Hämta filinfo
  308.                    tst.l  d0
  309.                    beq    EndLoop
  310.  
  311.                    move.l #Fileinfoblock,d2
  312.                    add.l  #8,d2                       ;Addera offset till adressen
  313.  
  314.                    clr.l  d0                          ;Nollställ räknare
  315.                    move.l d2,a0                       ;flytta filpekaren till A0
  316.                    move.l #Tempnamn,a1                ;flytta pathpekare till A1
  317. Loop:              move.b (a0)+,(a1)+                 ;flytta innehåll A0 => A1
  318.                    add.l  #1,d0                       ;öka räknaren
  319.  
  320.                    tst.b  (a0)                        ;Namnet slut? (0 terminering)
  321.                    bne.s  Loop                        ;Nej hoppa till loop
  322.  
  323.                    move.b #47,(a1)+                   ;lägg till en '/'
  324.                    add.l  #1,d0                       ;öka räknaren
  325.  
  326.                    move.l Pathstart,d2                ;hämta Path start
  327.                    move.l d2,a0
  328.  
  329. Loop2:             move.b -(a1),-(a0)                 ;spara path-stukturen till Path
  330.                    sub.l  #1,d0                       ;backa räknaren
  331.                    bne.s  Loop2
  332.  
  333.                    move.l a0,Pathstart                ;spara nuvarade pathstart
  334.  
  335.                    move.l NewLock,d1                  ;Hämta låset
  336.                    jsr    ParentDir(a6)               ;gå till tidigare dir
  337.                    move.l d0,ParLock                  ;spara låset
  338.                    move.l NewLock,d1                  ;Hämta föregående lås
  339.                    jsr    UnLock(a6)                  ;Släpp låset
  340.                    move.l ParLock,d0                  ;hämta nuvarnde lås
  341.                    move.l d0,NewLock                  ;och flytta detta
  342.                    tst.l  d0                          ;är vi i root ?
  343.                    bne    MainLoop                    ;Nej hoppa
  344.  
  345.                    move.l PathStart,a1                ;hämta pathstart
  346. Kolon:             cmp.b  #47,(a1)+                   ;hitta första '/'
  347.                    bne.s  kolon
  348.                    move.b #58,-(a1)                   ;Byt detta mot ':'
  349.  
  350.                    move.l PathStart,a1                ;hämta pathstart
  351.                    move.b #34,-(a1)                   ;lägg till '"'
  352.                    move.b #32,-(a1)                   ;lägg till ' '
  353.                    move.b #68,-(a1)                   ;lägg till 'D'
  354.                    move.b #67,-(a1)                   ;lägg till 'C'
  355.                    move.l a1,PathStart                ;spara den nya starten
  356.                    move.l #Path,a1
  357.                    add.l  #253,a1
  358.                    move.b #34,(a1)
  359.  
  360. Endloop:           rts
  361.  
  362. ;***************************************************************************
  363.                    end
  364.